package com.example.demo.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.concurrent.atomic.AtomicInteger;

public class SeqFactory {
    private static final int maxRandomNum = 99999;
    private static final int mixRandomNum = 10000;
    private static AtomicInteger randomAppeadNum = new AtomicInteger(mixRandomNum);//确保5位数
    private static final SimpleDateFormat DateFormat = new SimpleDateFormat("yyMMddHHmmssSSS");

    /**
     * 用当前时间加随机数生成一个20位的序列。每毫秒最大允许生成89999个。
     * 集群环境请使用jdk5的UUID生成，多了机器码等区别，才能保证全局唯一。
     * 本序列规则：yyMMddHHmmssSSS + randomAppeadNum。
     * 如：现在是2012-12-02的14:21:32.234，返回的就是15位：121202142132234（时间到毫秒）+ 再加上5位随机数。一共20位。
     * @return 唯一的20位数字
     */
    public synchronized static final String getNewSequenceAlone() {

        //如果当前值达到了maxRandomNum，就重置值从mixRandomNum开始
        randomAppeadNum.compareAndSet(maxRandomNum, mixRandomNum);
        int rand = randomAppeadNum.incrementAndGet();
        String mDateTime = DateFormat.format(Calendar.getInstance().getTime());
        String seq = mDateTime + rand;
        return seq;
    }

}
